package com.jml.程序员;

import org.junit.Test;

/**
 * 字符串压缩。利用字符重复出现的次数，编写一种方法，实现基本的字符串压缩功能。比如，字符串aabcccccaaa会变为a2b1c5a3。
 * 若“压缩”后的字符串没有变短，则返回原先的字符串。你可以假设字符串中只包含大小写英文字母（a至z）。
 *
 * 示例1:
 *  输入："aabcccccaaa"
 *  输出："a2b1c5a3"
 *
 * 示例2:
 *  输入："abbccd"
 *  输出："abbccd"
 *  解释："abbccd"压缩后为"a1b2c2d1"，比原字符串长度更长。
 * 提示：
 *
 * 字符串长度在[0, 50000]范围内。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/compress-string-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 字符串压缩 {

    public static void main(String[] args) {
        String my = my();
        System.out.println(my);
    }
    //StringBuilder的append比String字符串拼接快了十倍，使用数组的索引，比字符串索引快。
    public static String my(){
        String S = "aabcccccaa";
        char[] chars = S.toCharArray();
        StringBuilder newS = new StringBuilder();
        int flag = 0;
        for (int i = 0; i < chars.length; i++) {
            //防止到最后一个字符，chars[i+1]索引越界
            if(chars.length-1!=i && chars[i]==chars[i+1]){
                flag++;
            }else{
                 flag++;
                 newS = newS.append(chars[i]).append(flag);
                 flag = 0;
            }
        }
        if(newS.length()>=S.length()){
           return S;
        }else {
            return newS.toString();
        }
    }


}
